package entity

import (
	"errors"
	"fmt"
	"shqsoft.cn/pasnj/base"

	"github.com/jinzhu/gorm"
)

//ConfSttp 科目类型
type ConfSttp struct {
	ID    int    `gorm:"primary_key;column:TPNO"`
	Name  string `gorm:"column:TPNM;size:50"`
	PPNO  int    `gorm:"column:PPNO"`
	PPNM  string `gorm:"column:TPNM;size:50"`
	FPNO  int    `gorm:"column:FPNO"`
	FPNM  string `gorm:"column:TPNM;size:50"`
	KHTP1 int    `gorm:"column:KHTP1"`
	KHNM1 string `gorm:"column:TPNM;size:50"`
	KHTP2 int    `gorm:"column:KHTP2"`
	KHNM2 string `gorm:"column:KHNM2;size:50"`
	ORDE  int    `gorm:"column:ORDE"`
	PRID  int    `gorm:"column:PRID"`
}

//TableName 科目类型表名
func (ConfSttp) TableName() string {
	return "T_CONF_STTP"
}

//BaseItem 科目
type BaseItem struct {
	ID       int      `gorm:"AUTO_INCREMENT;primary_key;column:ID"`
	ITNO     string   `gorm:"column:ITNO;size:10"`
	ITNM     string   `gorm:"column:ITNM;size:100"`
	ConfSttp ConfSttp `gorm:"ForeignKey:STTP"`
	STTP     *int     `gorm:"column:STTP"`
}

//TableName BaseItem 机构表名
func (BaseItem) TableName() string {
	return "T_Base_Item"
}
func (o *BaseItem) BeforeCreate(tx *gorm.DB) (err error) {
	var count int
	err = tx.Model(BaseItem{}).Where(&BaseItem{ITNO: o.ITNO}).Count(&count).Error
	if err != nil {
		return err
	}
	if count > 0 {
		info := fmt.Sprintf("科目号%s已存在，请修改！", o.ITNO)
		return errors.New(info)
	}
	err = tx.Model(BaseItem{}).Where("ITNM=?", o.ITNM).Count(&count).Error
	if err != nil {
		return err
	}
	if count > 0 {
		info := fmt.Sprintf("科目名称%s已存在，请修改！", o.ITNM)
		return errors.New(info)
	}
	return
}
func BaseItemEF() base.EntityFunc {
	return func() interface{} {
		entity := BaseItem{}
		return &entity
	}
}
func BaseItemESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []BaseItem
		return &entities
	}
}
func ConfSttpEF() base.EntityFunc {
	return func() interface{} {
		entity := ConfSttp{}
		return &entity
	}
}
func ConfSttpESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []ConfSttp
		return &entities
	}
}
func init() {
	relationship := []string{"ConfSttp"}
	base.DaoPoolObj.Put("BaseItem", base.NewDefaultDao(BaseItemEF(), BaseItemESF(), relationship))
	base.DaoPoolObj.Put("ConfSttp", base.NewDefaultDao(ConfSttpEF(), ConfSttpESF(), nil))
}
